home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 41.zip
/
BS1 part 41
/
Abacus diskdrives IO.adf
/
CH4
/
MiniData_V1.bas
< prev
next >
Wrap
BASIC Source File
|
1978-06-28
|
13KB
|
643 lines
'MiniDat V1.0 © 1987 by GroSoft
TROFF
CLEAR,35000&
Arrays:
DIM Enter$(15),Maske$(15),Search$(15)
SCREEN 1,640,200,2,2
WINDOW 1,"Mini Data V1.0",,21,1
FOR i=1 TO 10
MENU i,0,1,""
NEXT i
MENU 1,0,1,"Mini Data"
MENU 1,1,1,"Open file F1"
MENU 1,2,1,"New File F2"
MENU 1,3,1,"Quit Mini Data F3"
MENU 2,0,1,"Search"
MENU 2,1,1,"Select F4"
MENU 3,0,1,"Mask"
MENU 3,1,1,"Mask change F5"
MENU 4,0,1,"Printer"
MENU 4,1,1,"Print record F6"
MENU 4,2,1,"Print file F7"
MENU 5,0,1,"Sort"
MENU 5,1,1,"Criterium F8"
COLOR 2,0
LOCATE 19,5:PRINT "File :"
LOCATE 20,5:PRINT "Record :"
Buffer
COLOR 1,0
MainLoop:
MENU ON
ON MENU GOSUB MenuBar
BREAK ON
ON BREAK GOSUB Interruption
ON ERROR GOTO Problem
ac$=""
ac$=INKEY$
IF ac$ ="" THEN MainLoop
IF ac$=CHR$(129) THEN FileOpen
IF ac$=CHR$(130) THEN NewFile
IF ac$=CHR$(131) THEN MiniDataQuit
IF MiniFile=1 THEN
IF ac$=CHR$(132) THEN Searcher
IF ac$=CHR$(133) THEN MaskChange
IF ac$=CHR$(134) THEN PrintRecord
IF ac$=CHR$(135) THEN MiniFilePrint
IF ac$=CHR$(136) THEN SortRoutine
IF ac$=CHR$(31) THEN PrevRecord
IF ac$=CHR$(30) THEN NextRecord
IF ac$=CHR$(13) THEN DataEntry
IF ac$=CHR$(28) THEN FirstRecord
END IF
GOTO MainLoop
MenuBar:
Menue=MENU(0)
MenuPoint=MENU(1)
IF Menue=1 THEN ON MenuPoint GOTO FileOpen,NewFile,MiniDataQuit
IF MiniFile=1 THEN
IF Menue=2 THEN ON MenuPoint GOTO Searcher
IF Menue=3 THEN MaskChange
IF Menue=4 THEN ON MenuPoint GOTO PrintRecord,MiniFilePrint
IF Menue=5 THEN SortRoutine
END IF
RETURN
FileOpen:
text$=""
LOCATE 22,5:PRINT "Please enter filename: "
Buffer
TextDataEntry 30,22,23,24,text$
LOCATE 22,5:PRINT SPACE$(70)
IF text$="" THEN MainLoop
ActualMiniFile$=text$+".MiniFile"
MiniFile=1:GOSUB MenuOn
CLOSE #1
quantity=0:nr=1:text$=""
OPEN "R",#1,ActualMiniFile$,730
FIELD #1,10 AS a$,720 AS b$
LOCATE 19,12:PRINT SPACE$(70)
LOCATE 19,12:PRINT ActualMiniFile$
GOSUB Separate
GOSUB MaskLoad
GOTO FirstRecord
NewFile:
text$=""
LOCATE 22,5:PRINT "Name of the file :"
TextDataEntry 22,22,23,24,text$
LOCATE 22,5: PRINT SPACE$(70)
IF text$="" THEN
LOCATE 22,28:PRINT "Procedure terminated!"
GOSUB Pause
GOTO MainLoop
END IF
IF INSTR(text$,":")<>0 THEN
LOCATE 22,19:PRINT "Please use the internal drive only."
GOSUB Pause
GOTO NewFile
END IF
CLOSE #1:ActualMiniFile$=""
quantity=0:nr=1
text$=text$+".MiniFile"
ActualMiniFile$=text$
GOSUB MenuOn
OPEN "R",#1,ActualMiniFile$,730
FIELD #1,10 AS a$,720 AS b$
LSET a$=CHR$(1)
LSET b$=CHR$(255)
PUT #1,1
nr=1:GOSUB AuxOutput
MiniFile=1
LOCATE 19,12:PRINT SPACE$(70)
LOCATE 19,12:PRINT ActualMiniFile$
GOSUB MenuOut
GOTO CreateMask
RecordChange:
Enter$=""
FOR i=1 TO quantity
xp%=1+i
text$=Enter$(i)
Buffer
TextDataEntry 28,xp%,80,32,text$
Enter$(i)=text$
LOCATE 1+i,28:PRINT SPACE$(32)
LOCATE 1+i,28
lang=LEN(text$):IF lang>32 THEN lang=32
PRINT MID$(text$,1,lang)
Enter$=Enter$+text$+CHR$(3)
NEXT i
GOSUB MenuOn
l$=STR$(LEN(Enter$))
LSET a$=l$
LSET b$=Enter$
PUT #1,nr
GOSUB MenuOut
GOTO MainLoop
PrintRecord:
GOSUB MenuOn
OPEN "PRT:" FOR OUTPUT AS #2
FOR i=1 TO quantity
PRINT #2,Enter$(i)
NEXT i
FOR i=1 TO 2:PRINT #2,CHR$(10):NEXT i
CLOSE #2
GOSUB MenuOut
IF under=1 THEN RETURN
GOTO MainLoop
MiniFilePrint:
GOSUB MenuOn
nr=1
OPEN "PRT:" FOR OUTPUT AS #2
more10:
ReturnChk=1:GOTO Separate2
R1:
FOR i=1 TO quantity
PRINT #2,Enter$(i)
NEXT i
FOR i=1 TO 2:PRINT #2,CHR$(10):NEXT i
nr=nr+1
GOTO more10
MiniDataQuit:
COLOR 1,0
LOCATE 22,21
PRINT "Are you sure ? (if yes then 'y')"
w:
be$=INKEY$
IF be$="" THEN GOTO w
IF UCASE$(be$)="Y" THEN CLOSE #1:END
LOCATE 22,5
PRINT SPACE$(70)
GOTO MainLoop
FirstRecord:
nr=1:halt=0
apart:
GOSUB MenuOn
GOTO Separate2
R3:
FOR i=1 TO quantity
LOCATE i+1,28
PRINT Enter$(i)
NEXT i
GOSUB AuxOutput
GOSUB MenuOut
IF under=1 THEN RETURN
GOTO MainLoop
PrevRecord:
halt=0
nr=nr-1:IF nr<1 THEN nr=1:GOTO MainLoop
GOTO apart
NextRecord:
IF halt=1 THEN MainLoop
vor=1
nr=nr+1
GOTO apart
DataEntry:
IF Enter$<>"" THEN RecordChange
FOR i= 1 TO quantity
text$=""
xp%=1+i
Buffer
TextDataEntry 28,xp%,80,32,text$
Enter$(i)=text$
LOCATE 1+i,28:PRINT SPACE$(32)
LOCATE 1+i,28
lang=LEN(text$):IF lang>32 THEN lang=32
PRINT MID$(text$,1,lang)
Enter$=Enter$+text$+CHR$(3)
NEXT i
GOSUB MenuOn
l$=STR$(LEN(Enter$))
LSET a$=l$
LSET b$=Enter$
PUT #1,nr
FIELD #1,10 AS init1$,720 AS init2$
LSET init1$=CHR$(1)
LSET init2$=CHR$(255)
PUT #1,nr+1
GOSUB MenuOut
halt=0
nr=nr+1
GOTO apart
Searcher:
FOR i=1 TO quantity
LOCATE 1+i,28
PRINT Search$(i)
NEXT i
LOCATE 22,19:PRINT "Please input or change search critera."
FOR i=1 TO quantity
text$=Search$(i)
xp%=1+i
Buffer
TextDataEntry 28,xp%,80,32,text$
Search$(i)=text$
LOCATE 1+i,28:PRINT SPACE$(32)
LOCATE 1+i,28
lang=LEN(text$):IF lang>32 THEN lang=32
PRINT MID$(text$,1,lang)
NEXT i
LOCATE 22,5:PRINT SPACE$(70)
FOR i=1 TO quantity
IF Search$(i)<>"" THEN start
NEXT i
LOCATE 22,24
PRINT "No search critera available."
GOSUB Pause
GOSUB AuxOutput
under=1:GOSUB apart:under=0:GOTO MainLoop
start:
nr=1
LOCATE 22,5:PRINT SPACE$(70)
start2:
GOSUB MenuOn
ReturnChk=2:GOTO Separate2
R2:
FOR i=1 TO quantity
IF Search$(i)<>"" AND INSTR(Enter$(i),Search$(i))=0 THEN moreIV
NEXT i
FOR i=1 TO quantity
LOCATE 1+i,28
PRINT Enter$(i)
NEXT i
GOSUB MenuOut
LOCATE 22,17:PRINT "F1=Print Record Key=Search ..."
question:
ab$=INKEY$
IF ab$="" THEN question
IF ab$=CHR$(129) THEN under=1:GOSUB PrintRecord:under=0
LOCATE 22,5:PRINT SPACE$(70)
moreIV:
nr=nr+1
GOTO start2
MaskLoad:
COLOR 2,0
OPEN MiniFileName$ FOR INPUT AS #3
INPUT #3,quantity
FOR i=1 TO quantity
INPUT #3,Maske$(i)
LOCATE i+1,2:PRINT "(";i:LOCATE i+1,5:PRINT ")"
LOCATE i+1,7
PRINT Maske$(i)
NEXT i
CLOSE #3
COLOR 1,0
RETURN
MaskeSave:
MiniFileName$=""
GOSUB Separate
GOSUB MenuOn
OPEN MiniFileName$ FOR OUTPUT AS #3
PRINT #3,quantity
FOR i=1 TO quantity
PRINT #3,Maske$(i)
NEXT i
CLOSE #3
GOSUB MenuOut
IF under=1 THEN RETURN
GOTO MainLoop
CreateMask:
FOR i=1 TO quantity
Maske$(i)=""
LOCATE 1+i,20
PRINT SPACE$(17)
NEXT i
again:
LOCATE 22,5
PRINT "Number of Fields per Record (max. 9) :"
quantity=0:IF other=0 THEN text$=""
Buffer
TextDataEntry 46,22,1,2,text$
LOCATE 22,5:PRINT SPACE$(70)
quantity=VAL(text$)
IF quantity<1 OR quantity>9 THEN again
mcreateII:
FOR i=1 TO quantity
text$=""
REM IF other=1 THEN text$=Maske$(i)
xp%=1+i
COLOR 2,0
LOCATE xp%,2:PRINT "(";i:LOCATE xp%,5:PRINT ")"
Buffer
TextDataEntry 7,xp%,19,20,text$
IF RIGHT$(text$,1)<>" " AND RIGHT$(text$,1)<>"." THEN text$=text$+" "
lang:
IF LEN(text$)<20 THEN text$=text$+".":GOTO lang
COLOR 1,0:LOCATE 1+i,7:PRINT SPACE$(18)
COLOR 2,0:LOCATE 1+i,7:PRINT text$
Maske$(i)=text$
NEXT i
other=0
COLOR 1,0
GOTO MaskeSave
MaskChange:
other=1
GOTO mcreateII
Pause:
FOR i=1 TO 4:MENU i,0,0:NEXT i
Buffer
LOCATE 22,63
PRINT "» Press a key «"
WHILE INKEY$="":WEND
LOCATE 22,5:PRINT SPACE$(70)
LOCATE 22,63:PRINT SPACE$(16)
FOR i=1 TO 4:MENU i,0,1:NEXT i
RETURN
AuxOutput:
COLOR 1,0
LOCATE 20,17:PRINT SPACE$(10)
LOCATE 20,17:PRINT STR$(nr)
RETURN
Interruption:
CLOSE #1:END
Problem:
GOSUB MenuOut
COLOR 1,0
LOCATE 22,5:PRINT SPACE$(70)
IF ERR=7 OR ERR=14 THEN
LOCATE 22,18:PRINT "Memory full."
RESUME Marke
END IF
IF ERR=53 THEN
LOCATE 22,19:PRINT "File not found."
LOCATE 19,12:PRINT SPACE$(63)
CLOSE #1
KILL ActualMiniFile$
MiniFile=0
RESUME Marke
END IF
LOCATE 22,17
PRINT "An Internal program error occoured."
Marke:
GOSUB Pause
GOTO MainLoop
Separate:
MiniFileName$=""
FOR i=1 TO LEN(ActualMiniFile$)
IF MID$(ActualMiniFile$,i,1)="." THEN stop1
MiniFileName$=MiniFileName$+ MID$(ActualMiniFile$,i,1)
NEXT i
stop1:
MiniFileName$=MiniFileName$+".Maske"
RETURN
Separate2:
z=0:n=1:Enter$=""
GET #1,nr
l$=a$:Enter$=b$
IF INSTR(Enter$,CHR$(255))<>0 THEN
GOSUB MenuOut
IF ReturnChk=1 THEN CLOSE #2:ReturnChk=0:GOTO FirstRecord
GOSUB AuxOutput
under=0
IF ReturnChk=2 THEN
LOCATE 22,21:PRINT "No more records available."
ReturnChk=0
GOSUB Pause
GOTO FirstRecord
END IF
FOR i=1 TO quantity:Enter$(i)="":NEXT i:Enter$=""
halt=1
END IF
l=VAL(l$)
FOR i=1 TO l
IF MID$(Enter$,i,1)=CHR$(3) THEN
z=z+1:IF z>quantity THEN ende
Enter$(z)=MID$(Enter$,n,i-n)
n=i+1
END IF
NEXT i
ende:
IF ReturnChk<>0 THEN ON ReturnChk GOTO R1,R2
GOTO R3
MenuOn:
FOR i=1 TO 5:MENU i,0,0:NEXT i
LOCATE 22,62:PRINT "» Moment ... «"
RETURN
MenuOut:
FOR i=1 TO 5:MENU i,0,1:NEXT i
LOCATE 22,62:PRINT SPACE$(14)
Buffer
RETURN
SortRoutine:
text$=""
LOCATE 22,5
PRINT "Sort using which field :"
Buffer
TextDataEntry 32,22,2,3,text$
LOCATE 22,5:PRINT SPACE$(70)
IF text$="" OR VAL(text$)<1 OR VAL(text$)>quantity THEN MainLoop
Kriterium=VAL(text$)
GOSUB MenuOn
nr=1
more:
z=0:n=1:Enter$=""
GET #1,nr
l$=a$:Enter$=b$
IF INSTR(Enter$,CHR$(255))<>0 THEN more2
nr=nr+1
GOTO more
more2:
Counter=nr-1
DIM DataEntry2$(Counter)
FOR k=1 TO Counter
z=0:n=1:Enter$=""
GET #1,1
l$=a$:Enter$=b$
l=VAL(l$)
FOR j=1 TO l
IF MID$(Enter$,j,1)=CHR$(3) THEN
z=z+1:IF z>quantity THEN ende2
Enter$(z)=MID$(Enter$,n,j-n)
n=j+1
END IF
NEXT j
ende2:
FOR i=1 TO Counter-1
z=0:n=1:DataEntry2$=""
GET #1,i+1
l2$=a$:DataEntry2$=b$
l2=VAL(l2$)
FOR j=1 TO l2
IF MID$(DataEntry2$,j,1)=CHR$(3) THEN
z=z+1:IF z>quantity THEN ende3
DataEntry2$(z)=MID$(DataEntry2$,n,j-n)
n=j+1
END IF
NEXT j
ende3:
IF Enter$(Kriterium) > DataEntry2$(Kriterium) THEN
LSET a$=l$
LSET b$=Enter$
PUT #1,i+1
LSET a$=l2$
LSET b$=DataEntry2$
PUT #1,i
GOTO iandk
END IF
Enter$=DataEntry2$:l$=l2$
FOR a=1 TO quantity:Enter$(a)=DataEntry2$(a):NEXT a
iandk:
NEXT i
NEXT k
ERASE DataEntry2$
GOSUB MenuOut
GOTO FirstRecord
SUB Buffer STATIC
Buffer:
ad$=INKEY$
IF ad$<>"" THEN ad$="":GOTO Buffer
END SUB
SUB TextDataEntry (xpos%,ypos%,Length%,Wide%,text2$) STATIC
SHARED text$
text$=text2$
COLOR 0,2
LOCATE ypos%,xpos%:PRINT SPACE$(Wide%)
COLOR 1,2
IF text$<>"" THEN LOCATE ypos%,xpos%:PRINT text$
quantity=0:StepNum=1:xpos2%=xpos%
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
1 :
ab$=INKEY$
IF ab$="" THEN 1
IF ab$=CHR$(3) OR ab$=CHR$(255) THEN 1
'Ende
IF ab$=CHR$(13) THEN goback10
'Cursor right
IF ab$=CHR$(30) AND text$<>"" AND quantity<LEN(text$) THEN
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),2
IF StepNum>0 THEN LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,1)
xpos%=xpos%+1
IF xpos%>xpos2%+Wide%-1 THEN
xpos%=xpos2%+Wide%-1
StepNum=StepNum+1
IF (StepNum-1)>50 THEN StepNum=50
END IF
lang=LEN(text$):IF lang>Wide% THEN lang=Wide%
IF StepNum>0 THEN LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,lang)
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
quantity=quantity+1
GOTO 1
END IF
IF ab$=CHR$(30) THEN 1
'Cursor left
IF ab$=CHR$(31) AND text$<>"" AND quantity>0 THEN
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),2
IF StepNum>0 THEN LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,1)
xpos%=xpos%-1
IF xpos%<xpos2% THEN
xpos%=xpos2%
StepNum=StepNum-1
IF (StepNum-1)<1 THEN StepNum=1
END IF
lang=LEN(text$):IF lang>Wide% THEN lang=Wide%
IF StepNum>0 THEN LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,lang)
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
quantity=quantity-1
'GOTO 1
END IF
IF ab$=CHR$(31) THEN 1
'Backspace
IF ab$=CHR$(8) AND quantity>0 AND text$<>"" THEN
text$=LEFT$(text$,quantity-1)+MID$(text$,quantity+1,LEN(text$)-quantity)
xpos%=xpos%-1:quantity=quantity-1
lang=LEN(text$):IF lang>Wide% THEN lang=Wide%
LINE (xpos%*8-8,ypos%*8-8)-((Wide%+xpos2%-1)*8-1,ypos%*8-1),2,bf
LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,lang)
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
GOTO 1
END IF
IF ab$=CHR$(8) THEN 1
' Delete
IF ab$=CHR$(127) AND quantity>=0 AND text$<>"" THEN
text$=LEFT$(text$,quantity)+MID$(text$,quantity+2,LEN(text$)-quantity)
lang=LEN(text$):IF lang>Wide% THEN lang=Wide%
LINE (xpos%*8-8,ypos%*8-8)-((Wide%+xpos2%-1)*8-1,ypos%*8-1),2,bf
LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,lang)
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
GOTO 1
END IF
IF ab$=CHR$(127) THEN 1
'DataEntry
IF LEN(text$)+1>Length% THEN 1
IF LEN(text$)>1 AND MID$(text$,quantity+1)<>"" THEN text$=LEFT$(text$,quantity)+ab$+MID$(text$,quantity+1,LEN(text$)-quantity) ELSE text$=text$+ab$
quantity=quantity+1
xpos%=xpos%+1
IF xpos%>xpos2%+Wide%-1 THEN
xpos%=xpos2%+Wide%-1
StepNum=StepNum+1
lang=LEN(text$):IF lang>Wide% THEN lang=Wide%
LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,lang)
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
GOTO 1
END IF
lang=LEN(text$):IF lang>Wide% THEN lang=Wide%
LOCATE ypos%,xpos2%:PRINT MID$(text$,StepNum,lang)
LINE (xpos%*8-8,ypos%*8-1)-(xpos%*8-1,ypos%*8-1),3
GOTO 1
goback10:
COLOR 1,0
END SUB